package com.boost.tjvm.gc;

/**
 * jdk 6
 * 进行 minor gc 之前 虚拟机先检查 老年代最大可用连续空间是否大于新生代所有对象总空间，如果成立那么minor gc
 * <p>
 * 否则 虚拟机检查 HandlePromotionFailure 参数 是否允许担保失败，如果允许 那么会继续检查老年代最大可用连续空间是否大于
 * 历次晋升老年代对象的平均大小，或者HandlePromotionFailure参数设置为不允许那么都会进行  full gc
 *
 * 或者 cms 收集器 XX:CMSInitiationgOccupancyFraction  默认大于 68% 也会进行full gc
 */
public class GuaranteeFailFullGc {

    private static final int _1mb = 1024 * 1024;

    /**
     *      * VM 参数 ： -verbose:gc -XX:+UseConcMarkSweepGC -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:+HandlePromotionFailure
     */
    public static void testHandlePromotion() {
        byte[] allocation1, allocation2, allocation3, allocation4, allocation5, allocation6, allocation7;

        allocation1 = new byte[2 * _1mb];
        allocation2 = new byte[2 * _1mb];
        allocation3 = new byte[2 * _1mb];
        allocation1 =null;
        allocation4 = new byte[2 * _1mb];
        allocation5 = new byte[2 * _1mb];
        allocation6 = new byte[2 * _1mb];
        allocation4=null;
        allocation5=null;
        allocation6=null;
        allocation7 = new byte[2 * _1mb];
    }
    public static void main(String[] args) {
        testHandlePromotion();
    }

}
